Connection Pooling হল একটি কার্যকরী পদ্ধতি যা একাধিক HTTP request পরিচালনার জন্য HTTP connections পুনঃব্যবহার করতে সহায়ক। এতে, যখন একটি HTTP request সম্পন্ন হয়, সংযোগটি pool এ ফিরে আসে, যা পরবর্তী request-এর জন্য পুনরায় ব্যবহার করা যেতে পারে, ফলে সার্ভারের সাথে নতুন সংযোগ স্থাপনের জন্য সময় এবং সম্পদ সাশ্রয় হয়।
Max Connections কনফিগারেশন হল একটি সেটিং যা নির্ধারণ করে কতটি সর্বাধিক concurrent HTTP connection একসাথে তৈরি করা যেতে পারে। এটি connection pooling এর অংশ এবং একাধিক request পরিচালনা করার সময় ক্লায়েন্টের দক্ষতা বৃদ্ধি করতে সহায়ক।
PoolingHttpClientConnectionManager
ব্যবহার করে আমরা connection pooling কনফিগার করতে পারি এবং এর মধ্যে maxTotal (মোট সর্বোচ্চ connections) এবং defaultMaxPerRoute (একটি রুটে সর্বোচ্চ connections) সেট করা হয়।setMaxTotal()
: সর্বোচ্চ connections নির্ধারণ করে।setDefaultMaxPerRoute()
: প্রতিটি route (এবং এর উপর ভিত্তি করে বিভিন্ন API endpoints) এর জন্য সর্বাধিক connections নির্ধারণ করে।import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.HttpHeaders;
import org.apache.http.util.EntityUtils;
public class HttpClientConnectionPoolingExample {
public static void main(String[] args) {
// Connection Pooling Configuration
int maxConnections = 50; // Total max connections
int maxConnectionsPerRoute = 10; // Max connections per route
// Pooling Connection Manager setup
PoolingHttpClientConnectionManager poolingConnManager = new PoolingHttpClientConnectionManager();
poolingConnManager.setMaxTotal(maxConnections); // Set max total connections
poolingConnManager.setDefaultMaxPerRoute(maxConnectionsPerRoute); // Set max connections per route
// RequestConfig setup with connection timeout and socket timeout
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000) // Connection timeout (5 seconds)
.setSocketTimeout(10000) // Socket timeout (10 seconds)
.build();
// HttpClientBuilder setup with pooling and custom timeouts
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(requestConfig) // Apply RequestConfig
.setConnectionManager(poolingConnManager) // Apply Connection Manager for pooling
.build();
// Example GET request
String url = "https://jsonplaceholder.typicode.com/posts";
try {
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader(HttpHeaders.USER_AGENT, "ApacheHttpClientDemo");
// Execute the request and get response
HttpResponse response = httpClient.execute(httpGet);
// Handle the response
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Code: " + statusCode);
HttpEntity entity = response.getEntity();
if (entity != null) {
String responseBody = EntityUtils.toString(entity);
System.out.println("Response Body: " + responseBody);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
setMaxTotal(maxConnections)
: এটি সর্বোচ্চ কনেকশন সংখ্যা নির্ধারণ করে যা HTTP ক্লায়েন্ট মোট একযোগে ব্যবহার করতে পারে। উদাহরণস্বরূপ, এখানে 50টি কনেকশন একযোগে ব্যবহার করা যাবে।setDefaultMaxPerRoute(maxConnectionsPerRoute)
: এটি নির্ধারণ করে কতটি কনেকশন এক রুটে (এবং সাধারণত একই API endpoint) ব্যবহার করা যাবে। উদাহরণস্বরূপ, এখানে প্রতি রুটে 10টি কনেকশন সীমিত করা হয়েছে।setConnectTimeout(5000)
: এটি কনেকশন স্থাপনের জন্য সর্বোচ্চ সময় (5 সেকেন্ড) নির্ধারণ করে।setSocketTimeout(10000)
: এটি সার্ভারের থেকে রেসপন্স পাওয়ার জন্য সর্বোচ্চ সময় (10 সেকেন্ড) নির্ধারণ করে।setDefaultRequestConfig(requestConfig)
: এখানে কনফিগার করা timeouts HTTP ক্লায়েন্টের জন্য অ্যাপ্লাই করা হচ্ছে।setConnectionManager(poolingConnManager)
: এই লাইনটি connection pooling কনফিগারেশনটি ক্লায়েন্টের সাথে যুক্ত করছে।HttpGet
ব্যবহার করা হয়েছে, তবে আপনি HttpPost
বা অন্য কোনো HTTP মেথড ব্যবহার করতে পারেন।setHeader()
দ্বারা custom headers যোগ করা হয়েছে, যেমন User-Agent
।Apache HTTP Client-এ Connection Pooling এবং Max Connections কনফিগারেশন করলে আপনি একাধিক HTTP request সহজভাবে পরিচালনা করতে পারবেন। আপনি PoolingHttpClientConnectionManager ব্যবহার করে মোট এবং প্রতি রুটে connection-এর সীমা নির্ধারণ করতে পারবেন, যা সার্ভারের সাথে যোগাযোগের পারফরম্যান্স উন্নত করতে সাহায্য করবে।
common.read_more